package org.mbcorp.sar.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table
public class Logro implements Serializable {

	private static final long serialVersionUID = 1L;

	@Embeddable
	public static class Id implements Serializable {

		private static final long serialVersionUID = 1L;

		@Column
		private Integer idOperador;

		@Column
		private Integer idMedalla;

		public Id() {
		}

		public Id(int idOperador, int idMedalla){
			this.idMedalla = idMedalla;
			this.idOperador = idOperador;
		}
		
		public boolean equals(Object o){
			if (o != null && o instanceof Id){
				Id that = (Id)o;
				return this.idMedalla.equals(that.idMedalla) &&
						this.idOperador.equals(that.idOperador);
			} else {
				return false;
			}
		}
		
		public int hashCode(){
			return idMedalla.hashCode() + idOperador.hashCode();
		}
		
	}
	
	@EmbeddedId
	private Id id = new Id();
	
	@JoinColumn(name = "idOperador", insertable = false, updatable = false)
	@ManyToOne
	private Operador operador;
	
	@JoinColumn(name = "idMedalla", insertable = false, updatable = false)
	@ManyToOne
	private Medalla medalla;
	
	@Column
	private Date fechaObtencion;
	
	@Column
	private Integer nivelProgreso;

	public Id getId() {
		return id;
	}

	public void setId(Id id) {
		this.id = id;
	}

	public Operador getOperador() {
		return operador;
	}

	public void setOperador(Operador operador) {
		this.operador = operador;
	}	

	public Medalla getMedalla() {
		return medalla;
	}

	public void setMedalla(Medalla medalla) {
		this.medalla = medalla;
	}

	public Date getFechaObtencion() {
		return fechaObtencion;
	}

	public void setFechaObtencion(Date fechaObtencion) {
		this.fechaObtencion = fechaObtencion;
	}

	public Integer getNivelProgreso() {
		return nivelProgreso;
	}

	public void setNivelProgreso(Integer nivelProgreso) {
		this.nivelProgreso = nivelProgreso;
	}	
	
	@Transient
	public int getPorcentajeProgreso(){
		return (100* this.getNivelProgreso())/(this.getMedalla().getTotalProgreso());
	}
}
